%% @doc パスを管理する
%%
-module(templ_path_manager_impl).
-export([init/1, terminate/2, code_change/3]).
-export([set_path/2, append_path/2, get_path/1]).


%% @type state() = list(string())


%% @spec init([]) -> {ok, []}
%% @doc Initiates the server
%%
init(State) when is_list(State) -> 
	{ok, State}.


%% @spec set_path(state(), [string()] | string()) -> {noreply,[string()]}
%% @doc テンプレートファイル読み込みパスを上書き設定する
%%
set_path(State, [Dir|Dirs]) when is_list(Dir) ->
	{noreply,S} = set_path(State, Dir),
	append_path(S, Dirs);
set_path(_State, []) ->
	{noreply,[]};
set_path(_State, Dir) when is_list(Dir) ->
	{noreply,[Dir]}.


%% @spec append_path(state(), [string()] | string()) -> {noreply,[string()]}
%% @doc テンプレートファイル読み込みパスを追加設定する
%%
append_path(State, [Dir|Dirs]) when is_list(Dir) ->
	{noreply,S} = append_path(State, Dir),
	append_path(S, Dirs);
append_path(State, []) -> 
	{noreply,State};
append_path(State, Dir) when is_list(Dir) ->
	case get_path(State) of
		{reply,[],_}   -> {noreply,[Dir]};
		{reply,Dirs,_} -> {noreply,Dirs++[Dir]}
	end.


%% @spec get_path(state()) -> {reply,[string()],state()}
%% @doc パスを得る
%%
get_path(State) ->
	{reply,State,State}.


terminate(_Reason, _State) -> ok.
code_change(_OldVsn, _State, _Extra) -> {ok, 0}.
